﻿#include <iostream>     // 引入标准输入输出库，用于打印信息
#include <future>       // 引入 future/promise 相关功能
#include <thread>       // 引入线程库，用于创建线程

// 定义一个函数 write_db，接收一个右值引用的 std::promise<bool> 类型参数
void write_db(std::promise<bool>&& prom) {
    // 模拟写入数据库的耗时操作，暂停1秒
    std::this_thread::sleep_for(std::chrono::seconds(1));

    // 数据库写入完成，设置 promise 的值为 true
    prom.set_value(true);  // 这会唤醒主线程中等待结果的 future
}

int main() {
    // 创建一个 promise<bool> 对象，用于线程间传递布尔值
    std::promise<bool> prom;

    // 从 promise 获取一个 future，用于在另一个线程中接收结果
    std::future<bool> fut = prom.get_future();

    // 创建一个线程 t，运行 write_db 函数，将 promise 移交给该线程
    std::thread t(write_db, std::move(prom));  // 必须使用 std::move 转移权属

    // 主线程继续执行，打印提示
    std::cout << "Writing to DB..." << std::endl;

    // 等待异步线程设置 promise 值，此处会阻塞直到 write_db 调用 set_value
    bool result = fut.get();

    // 输出最终结果，std::boolalpha 让 bool 值显示为 true/false 而不是 1/0
    std::cout << "DB Write Success: " << std::boolalpha << result << std::endl;

    // 等待子线程结束，回收资源
    t.join();
}
